\newpage
\chapter{Agile und Traditionelle Softwareentwicklung}
In diesem Kapitel werden agile und traditionelle Methoden miteinander verglichen. Dabei wird der Vergleich in die Abschnitte Prozess, Projektmanagement und Personen unterteilt. Daraus lässt sich gut erkennen welche Unterschiede zwischen den beiden Vorgehensweisen herrschen und es lässt sich erahnen wie wichtig die Zusammensetzung eines Teams im agilen Umfeld ist. Die entscheidenden Unterschiede werden noch einmal in Tabelle \ref{tab:AgilTraditionell} dargestellt.
\section{Prozess}
In der Softwareentwicklung gibt es zwei Ansätze. Einmal die traditionelle Softwareentwicklung, die meistens auf dem Wasserfallmodell oder einer davon abgeleiteten Variante basiert. Diese Methode ist eine lineare und strukturierte Vorgehensweise, die auf Prozesse angewiesen ist um das Endergebnis zu erreichen. Zweitens die agile Methodik, dies ist ein nichtlinearer Ansatz zur Softwareentwicklung. Dabei werden Änderungen in den Anforderungen und der Planung flexibel über den gesamten Prozess angepasst (vgl. \cite{BalMahNer06}).
\\
\\
Traditionelle Praktiken lassen sich in vier verschiedene Phasen unterteilen. Im ersten Schritt werden die Anforderungen für das Projekt und der Zeitplan festgelegt. In dieser Phase wird auch versucht alle Probleme, die entstehen können, vorherzusagen. Sobald die Voraussetzungen geschaffen sind beginnt die Planung in der die technische Infrastruktur geschaffen wird. Nachdem die Planung abgeschlossen ist beginnt die Entwicklungsphase in der so lange Code erzeugt wird bis die spezifizierten Ziele erreicht werden. Die Entwicklung wird oft in kleinere Aufgaben aufgeteilt, die dann in verschiedenen Teams auf Grundlage ihrer \textit{Fertigkeiten} bearbeitet werden. Die Testphase  überschneidet sich oft mit der Entwicklungsphase um so sicherzustellen, dass Probleme frühzeitig erkannt werden. Wenn sich das Projekt der Fertigstellung nähert und die Anforderungen erfüllt sind, wird der Kunde in die Prüf- und Feedbackphase mit einbezogen (vgl. \cite{BalMahNer06}).
\\
\\
Dieser lineare Ansatz zur Softwareentwicklung stützt sich auf strukturierte Prozesse und schwere Dokumentation. Der Erfolg einer starren Struktur beruht auf der Tatsache, dass alle Anforderungen bekannt sind, bevor die Entwicklungsphase beginnt. Dies macht es leicht, Zeitpläne festzulegen und Projektkosten sowie Ressourcen zu bestimmen. Doch während der Umsetzung können Probleme und neue Spezifikationen in der Entwicklungsphase auftreten. Der traditionelle Ansatz der Softwareentwicklung bietet nicht die Flexibilität, um diese Probleme ohne große Kosten und Zeitaufwand zu lösen. In komplexen Situationen kann dies bedeuten, dass ein Projekt noch einmal neu aufgenommen werden muss (vgl. \cite{BalMahNer06}).
\\
\\
Ein flexibler Ansatz zur Entwicklung von kundenspezifischer Software ist die agile Methodik. Bei diesem Ansatz liegt der Schwerpunkt weniger auf einem strukturierten Prozess der Entwicklung, sondern vielmehr auf der \textit{Zusammenarbeit} im Team. Anstatt den Fortschritt eines Projekts an Unterlagen zu messen, ist hier das Ziel funktionierende Software in inkrementellen Phasen zu erzeugen. Im Gegensatz zu traditionellen Methoden steht der Kunde und der Entwickler im gesamten Projekt in engem Kontakt und treffen nicht nur beim Erstellen der Anforderungen, der Dokumentation und den Vertragsverhandlungen aufeinander. Agile Methoden wurden entwickelt um auf ständig ändernde Bedürfnisse in einem Projekt besser reagieren zu können (vgl. \cite{BalMahNer06}).
\\
\\
Bei agiler Softwareentwicklung werden Aufgaben iterativ und in kurzen Zyklen abgearbeitet. Diese Zyklen dauern im Schnitt 1-4 Wochen. Diese Iterationen folgen dem gleichen Verfahren wie bei der herkömmlichen Softwareentwicklung. Allerdings beinhaltet dieser Ansatz mehrere Iterationen in denen das Projekt durchlaufen wird anstatt zu versuchen in einem einzelnen Entwicklungszyklus ein fertiges Produkt zu erstellen. Zu Beginn jeder Iteration wird das Projekt neu bewertet. Dies ermöglicht es auf wechselnde Anforderungen auch am Ende des Entwicklungsprozesses zu reagieren. Da der Kunde mehrere lauffähige Versionen der Software im gesamten Prozess erhält und so direkt Feedback geben kann, minimiert dies die Risiken auf Änderungen und somit auch der Kosten (vgl. \cite{BalMahNer06}).
\\
\\
Trotz des gesenkten Risikos bei der Softwareentwicklung mit agilen Methoden gibt es auch dort gewisse Nachteile. Aufgrund der Flexibilität kann es bei diesem Ansatz zu Schwierigkeiten bei der Erstellung von Zeitplänen und der Berechung des Budgets für das Projekt kommen. Der Erfolg beim agilen Vorgehen stützt sich auch auf die kontinuierliche Zusammenarbeit mit dem Kunden, wenn dieser aber keine Zeit hat um an dem Prozess teilzunehmen muss dieser Ansatz nicht unbedingt der Beste sein (vgl. \cite{BalMahNer06}).

\section{Projektmanagement}
In traditionellen Modellen legt der Projektmanager den Terminplan fest und überwacht diesen. Dementsprechend trägt der Projektmanager die Verantwortung für die Fertigstellung eines Projekts. Bei agilen Methoden werden diese Entscheidungen und Verantwortlichkeiten unter den Teammitgliedern aufgeteilt. Agile Manager dienen dabei als Vermittler, die Ziele und Beschränkungen setzen. Das Team selbst aber setzt sich Prioritäten, bestimmt Termine und liefert die Software aus. Dies definiert die Rolle und Autorität eines Projektmanagers bei der agilen Entwicklung völlig neu. Projektmanagement in der agilen Entwicklung bewegt sich also weg von der Überprüfbarkeit und Kontrolle der Anforderungen, hin zu einem Führungsstil, der zu einer vertrauensbasierten gemeinschaftlichen Entscheidungsfindung aller Teammitglieder wird (vgl. \cite{BalMahNer06}).

\section{Personen}
Ein wesentlicher Unterschied zwischen agilen und traditionellen Vorgehen liegt auf der Ebene der Menschen, ihren Rollen und Verantwortlichkeiten. Ein Schlüs\-sel\-be\-griff des agilen Manifests besagt, dass die Menschen (Softwareentwickler und Kunde) einen wichtigen Eckpfeiler der Softwareentwicklung bilden. Es besagt auch das die Erfolgschancen deutlich besser sind, wenn Menschen zusammen in kreativen Teams arbeiten. Da nun das Augenmerk auf dem gesamten Team liegt anstatt auf einzelnen Entwicklern stellt dies eine große Veränderung für die Entwickler selbst und die Projektmanager dar, die auf das Entwickeln unter traditionellen Methoden geschult wurden  (vgl. \cite{BalMahNer06}).
\\
\\
Bei traditionellen Vorgehen liegt das Hauptaugenmerk auf den Fähigkeiten eines Entwicklers. Softwareentwickler sind spezialisiert auf Aufgaben wie Analyse, Datenbanken oder die Programmierung. Diese Spezialisierung wird bei agilen Methoden abgebaut und das gesamte Team übernimmt die Verantwortung für Analyse, Design, Programmierung und das Ausliefern funktionierenden Codes. Dies ist ein Vorgehen, das von agilen Methoden konsequent gefördert wird. In agilen Teams ändert sich die Rolle unter gegenseitigem Einvernehmen einer Person sehr häufig. Durch die leichtgewichtige Dokumentation ist es zwingend notwendig das alle Teammitglieder ein implizites Wissen über das gesamte Projekt entwickeln. Der ständige Wechsel der Rollen fördert das Verständnis und den Wissensaustausch in einem agilen Projekt. Auch wird dadurch das kollektive Bewusstsein für die Verantwortung des Codes gefördert. Durch die Verantwortung des gesamten Teams führt dies auch zu Lob und Belohnung des ganzen Teams (vgl. \cite{BalMahNer06}).
\\
\\
Durch Teamarbeit und die gemeinsame Verantwortung des Codes kann es leicht zu Konflikten kommen. Solche Konflikte können durch die Aufgabe an sich, aber auch durch die Beziehungen unter den Teammitgliedern entstehen. Aufgabenbezogene Konflikte können durch inhaltliche Fragen entstehen, wie z.B. unterschiedliche Ideen, Meinungen und Herangehensweisen an eine Aufgabe. Beziehungskonflikte können durch zwischenmenschliche oder emotionale Auseinandersetzungen entstehen. Diese Konflikte können durch Gefühle wie Feindseligkeit oder Verärgerung hervorgerufen werden. Während aufgabenbezogene Konflikte innerhalb eines gewissen Rahmens eine förderliche Wirkung auf die Leistung eines Teams haben kann, wirken sich Beziehungskonflikte in der Regel negativ auf die Effektivität des Teams aus (vgl. \cite{BalMahNer06}).
\\
\\
Aspekte bei agilen Vorgehen, wie die verschiedenartige Entscheidungsfindung mit mehreren Akteuren, Selbstorganisation und gemeinsame Verantwortung des Codes können zu aufgabengebundenen Konflikten führen. Wenn solche Konflikte nicht korrekt gehandhabt werden, können dadurch Konflikte auf der Beziehungsebene entstehen, die dann weitaus negativere Folgen haben können. Bei der Umstellung von traditionellen auf agile Methoden kann es ebenfalls zu Konflikten kommen. Diese können durch Veränderung der Arbeitsgewohnheiten, der Arbeitsumgebung, fehlen von klaren Dokumenten, verzicht des Code-Eigentums und Umstellung von Einzel- zu Teambelohnung entstehen (vgl. \cite{BalMahNer06}).
\\
\\
Die bisher aufgeführten Punkte unterstreichen die Tatsache, dass sich durch die Annahme der agilen Methoden die Arbeitsumgebung für Softwareentwickler deutlich ändert. Bei traditionellen Vorgehen gelten die intelektuellen Fähig\-keit\-en eines Menschen als entscheidener Faktor bei der Bestimmung über den Erfolg eines Softwareentwicklers. Während bei agilen Teams weiterhin die intelektuellen Fähigkeiten wichtig sind, nimmt hier aber auch das Persönlichkeitsprofil eines Softwareentwicklers starken Einfluss auf die Wirksamkeit des gesamten Teams. Mehrere Studien haben die Wirkung von Persönlichkeiten auf die Arbeitsleistung untersucht (\cite{BarMou91}). Es ist inzwischen allgemein anerkannt, dass Menschen Veranlagungen haben, die sich auf ihre Arbeitseinstellung auswirken. Persönlichkeitsprofile könnten dabei helfen die Leistung am Arbeitsplatz und den beruflichen Erfolg vorherzubestimmen. Daher sind Forscher an der Untersuchung agiler Methoden unter Berücksichtigung von Per"-sön"-lich"-keits"-merk"-mal"-en von Softwareentwicklern und die daraus resultierenden Leistungen im Team interessiert (vgl. \cite{BalMahNer06}).



	\begin{table}[!h]
	\center
    \begin{tabular}{ | p{5cm} | p{4.5cm} | p{4.5cm} |}
    \hline
    & \textbf{Traditionell} & \textbf{Agil} \\ \hline
    Fokus & individuelle Kreativität\newline Prozesse und Tools\newline technisch\newline Optimierung & Teamkreativität\newline Mensch und Interaktion\newline sozialtechnisch\newline anpassen und lernen \\ \hline
    \textbf{Prozesscharakteristik} & & \\ \hline
    Änderungsbereitschaft & niedrig & hoch \\ \hline
    Prozessablauf & sequenziell & iterativ \\ \hline
    Kundenbeteiligung & teilweise & hoch \\ \hline
    Code Konventionen & nützlich & sehr wichtig \\ \hline
    Prozess Kommunikation & Dokumentation & zwischenmenschliche Interaktion \\ \hline
    \textbf{Projektmanagement} &  & \\ \hline
    Hauptentscheider & Projektmanager & Entwicklerteam \\ \hline
    Managementkontrolle & durch Pläne, Prozesse und Überprüfung  & vertrauensbasiert und selbstorganisiert \\ \hline
    \textbf{den Mensch betreffend} & & \\ \hline
    Rollen & Definiert und relativ konstant & häufiger Wechsel nach Ermessen der Entwickler \\ \hline
    Code Ownership & individuell verantwortlich & ganzes Team ist verantwortlich \\ \hline
    Belohnungen & individuell  & ganzes Team  \\ \hline 
  
    \end{tabular}
      \caption{Unterschiede zwischen Traditionell und Agil}
      \label{tab:AgilTraditionell}
    \end{table}

